"use strict";

var uk = {
    /** 所有房间 */
    rooms:{},
    /** 数据库 */
    db:null
};
module.exports = uk;

/** 定义一些事件常量 */
uk.events = {
    ROLEBUILD:'rolebuild',
    ROUND_BEGIN:'roundbegin',
    ROUND_END:'roundend',

    DEAL_CARD:'dealcard',
    ATTACK:'attack',
    CHANGE_PROP:'changeprop',
    ADD_BUFF:'addbuff',
    DEL_BUFF:'delbuff',

    /** 出牌和被出牌 */
    DO_OUTCARD:'docard',
    ON_OUTCARD:'oncard',
};

/** 事件状态 */
uk.event_status={
    /** 结算前 */
    BEFORE:'before',
    /** 结算时 */
    NOW:'now',
    /** 结算后 */
    AFTER:'after'
}

/** 大厅状态 */
uk.hall_status={
    NONE:0,
    WORKING:1,
    CLOSING:2,
    END:3
}

/** 房间状态 */
uk.room_status={
    NONE:0,
    INGAME:1,
    GAMEEND:2,
    LOCKED:0x10
}

/** 房间类型 */
uk.room_types={
    /** 怪物 */
    MONSTER:0x00,
    /** 玩家对战 */
    PLAYER:0x01,
    /** 商店 */
    SHOP:0x02,
}

/** 目标类型 */
uk.target_types={
    SELF:0,
    FRIEND:1,
    ENEMY:2
}

/** buff扩展类型 */
uk.buff_types={
    /**移除时恢复我变更的属性 */
    REMOVE_RECOVER:0x0001,
    /**可叠加 */
    OVERLAPPED_ABLE:0x0002,
    /**永久性效果，这个通常用于装备类 */
    PERPETUAL:0x0004,
    /**不显示图标，默认显示 */
    HIDDEN_ICON:0x0008
}

/**商品类型 */
uk.item_types={
    /**卡牌 */
    CARD:0,
    /**装备 */
    EQUIP:1,
    /**角色 */
    ROLE:2
}

/** 公共方法 */
uk.rand=function(_min,_max){
    return Math.floor(Math.random()*(_max-_min))+_min;
}

/** 获取对象第一层级的属性数 */
uk.countof=function(obj,calcall){
    var _c = 0;
    for(var _k in obj){
        var o = obj[_k];
        var s = typeof o;
        if(s != 'function'){
			if(calcall){
				_c+=(s=='object')?this.countof(o):1;
			}else{
                _c ++;
            }
        }
    }
    return _c;
}

/**克隆对象，只克隆第一层 */
uk.fastclone = function(obj){
    var r = {};
    for(var c in obj){
        r[c] = obj[c];
    }
    return r;
}
uk.clone = function(obj){
    var r = {};
    for(var c in obj){
        var o = obj[c];
        if(typeof o == 'object')
            r[c] = uk.clone(o);
        else
            r[c] = o;
    }
    return r;
}

/** 检测用户是不是怪物 */
uk.ismonster=function(r){
    return parseInt(r.template.id) >= 1000;
}

/** guid获取 */
uk.__guidseed = 0xabab;
uk.getnewguid=function(){
    var d = new Date();
	/**
	 * rand(4)-milsec(8)-seed(4)-rand(4);
	 * xxxx
	 *  */
    return uk.rand(1000,10000)+'-'+(d.getTime()&0xfffff)+'-'+((uk.__guidseed++)&0xffff)+'-'+uk.rand(1000,10000);
}
uk.getnewguidn=function(){/**数字型 */
    var d = new Date();
	/**
	 * rand(4)-milsec(8)-seed(4)-rand(4);
	 * xxxx
	 *  */
    return (((d.getTime()&0xffff)<<16)|(((uk.__guidseed++)&0xff)<<8))+uk.rand(0,255);
}

uk.start_timer=function(timeout,callback,objthis){
    var args=[];
    for(var i = 3;i<arguments.length;++i)
        args.push(arguments[i]);
    return setTimeout(function(){callback.apply(objthis,args);},timeout);
}

uk.stop_timer=function(t){
    clearTimeout(t);
}